#ifndef __PLASMA_CANNON_STATES_HPP__
#define __PLASMA_CANNON_STATES_HPP__

#include <vector>
#include "../BaseState.hpp"
#include "PlasmaCannonStateNames.hpp"
//#include "../Particles/BaseEmitter.hpp"

class AnimatedSprite;
class PlasmaCannon;
class MMessage;

class PlasmaCannonListen : public BaseState<PlasmaCannon, PlasmaCannonStateName>
{
public:
	PlasmaCannonListen() { m_stateName = PCSN_LISTEN; }

	void beginState(PlasmaCannon*);
	void updateState(PlasmaCannon*, clock_t);
	void endState(PlasmaCannon*);
	void handleMessage(PlasmaCannon*, MMessage* pMsg);
};

class PlasmaCannonIdle : public BaseState<PlasmaCannon, PlasmaCannonStateName>
{
public:
	PlasmaCannonIdle() { m_stateName = PCSN_IDLE; }
	//~PlasmaCannonIdle();

	void beginState(PlasmaCannon*);
	void updateState(PlasmaCannon*, clock_t);
	void endState(PlasmaCannon*);
	void handleMessage(PlasmaCannon*, MMessage* pMsg) {};
};

class PlasmaCannonShot : public BaseState<PlasmaCannon, PlasmaCannonStateName>
{
public:
	PlasmaCannonShot() { m_stateName = PCSN_SHOT; }
	//~PlasmaCannonShot();

	void beginState(PlasmaCannon*);
	void updateState(PlasmaCannon*, clock_t);
	void endState(PlasmaCannon*);
	void handleMessage(PlasmaCannon*, MMessage* pMsg) {};

private:
	AnimatedSprite*    m_pGunfire;
	AnimatedSprite*    m_pBullets;
	int                m_iCooldown;
	float              m_fTempOffset;
	std::vector<int>*  m_pVec;
};


#endif //__PLASMA_CANNON_STATES_HPP__

//EOF
